#ifndef DECRYPTER_H_
#define DECRYPTER_H_

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "md5.h"

#define MD5_LENGTH 32
#define MAX_PWD_LENGTH 6
#define FIRST_PRINTABLE_CHARACTER 32
#define LAST_PRINTABLE_CHARACTER 126

/* Obtiene la el MD5 de la cadena input y lo guarda en output */
void get_md5(unsigned char *input, unsigned char *output);

/* Obtiene el password siguiente a probar de actualPassword y lo guarda en el mismo */
void incrementPassword(unsigned char actualPassword[], int passwordLength);

/* Obtiene por fuerza bruta el password cuyo md5 coincide con encryptedPassword
 *
 * encryptedPassword[]: el md5 a desencriptar
 * passwordLength : longitud del password que se esta buscando
 * sal[] : sal si se conoce, los 3 primeros caracteres de las claves a probar
 * result[] : buffer donde se guarda la pass obtenida
 */
int bruteForce(unsigned char encryptedPassword[], int passwordLength,
		unsigned char salt[], int saltMode, unsigned char result[]);

#endif /* DECRYPTER_H_ */
